﻿using System;
using System.Collections.Generic;

namespace 解释器模式
{
    /// <summary>
    /// Interpreter模式的应用场合是Interpreter模式应用中的难点，只有满足“业务规则频繁变化，且类似的模式不断重复出现，并且容易抽象为语法规则的问题”才适合使用Interpreter模式。
    ///  1、当一个语言需要解释执行，并可以将该语言中的句子表示为一个抽象语法树的时候，可以考虑使用解释器模式（如XML文档解释、正则表达式等领域）
    ///  2、一些重复出现的问题可以用一种简单的语言来进行表达。
    ///  3、一个语言的文法较为简单.
    ///  4、当执行效率不是关键和主要关心的问题时可考虑解释器模式（注：高效的解释器通常不是通过直接解释抽象语法树来实现的，而是需要将它们转换成其他形式，使用解释器模式的执行效率并不高。）
    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context("usa--chi");

            List<PeopleInterpreter> interpreterList = new List<PeopleInterpreter>()
            {
                new Chinese(),
                new Usa()
            };
            foreach(var item in interpreterList)
            {
                item.Conversion(context);

            }
            Console.WriteLine(context.Get());
        }
    }
}
